<!-- 
    严格模式的变化
    严格模式对javascript的语法和行为，都做了一些改变

    1.变量规定
    在正常模式下，如果一个变量没有声明赋值，默认是全局变量，严格模式禁止这种用法
    ，变量必须先用var声明，然后在使用

    2.严禁删除已经删除的变量，例如，delete x;语法是错误的

    3.严格模式下的this指向问题
    1.以前在全局作用下作用域函数中this指向window对象
    2.在严格模式下全局作用域中函数中的this是undefined。
    3.以前构造函数时不加New也可以调用，当普通函数，this指向全局对象
    4.严格模式下，如果构造函数不加new调用，this会报错
    5.new实例化的构造函数指向创建的对象实例
    6.定时器this还是指向window。
    7.事件，对象还是指向调用者
 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 'use strict';
        //变量名要先声明在使用
        // num = 10;
        // console.log(num);

        var num = 10;
        console.log(num);
        //2.不能随意删除已经声明好的变量
        // delete num;

        function fn() {
            console.log(this);  //输出undefined
        }
        fn();

        //3.严格模式下，如果，构造函数不加new调用，this会报错
        function Star() {
            this.sex = '男';
        }
        Star()  //严格模式下报错
        var ldh = new Star();
        console.log(ldh.sex);

        //4.严格模式下定时器this还是指向window
        setTime(function () {
            console.log(this);
        }, 2000);

    </script>
</body>

</html>